Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: 迷途小羔羊   发起时间: 2008-08-15 11:03 上午   回复: 1

Print Search
帖子排序:    
   2008-08-15, 11:03 上午
yanzou 离线,最后访问时间: 2008/8/15 10:58:15 迷途小羔羊

发帖数前500位
注册: 2008-08-15
发 贴: 1
Embarrassed [:$] 初始断点
Reply Quote
我看了调式软件这本书,我发现在书中646页,里面有个为新进程创建第一个堆的栈回溯,但是由于进入windbg时在初始断点出停下,导致无法看书上所说的栈回溯,我想问一下,有没有什么方法能看到那个新进程创建第一个堆的栈回溯。
IP 地址: 已记录   报告
   2008-08-16, 13:39 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 初始断点
Reply Quote
有几种让被调试进程更早中断到调试器的做法,比如启用模块加载事件或者进程创建事件(参考30.9节和图30-14)。
也就是在你当前的调试会话中,选择Debug>Event Filters...,选中Load Module,然后选中Enabled。
而后重新启动被调试程序,当WinDBG询问是否保存工作空间时,选保存。
0:000> .restart /f
CommandLine: C:\dig\dbg\author\code\bin\Debug\AcsVio.exe
WARNING: Inaccessible path: 'D:\new\SYMBOLS.PRI\retail'
Symbol search path is: SRV*d:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 00400000 0042c000 AcsVio.exe
ModLoad: 7c900000 7c9b0000 ntdll.dll
eax=004011a0 ebx=7ffd8000 ecx=020ca435 edx=00000078 esi=014ef764 edi=014ef6f2
eip=7c810685 esp=0012fffc ebp=00000244 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000200
7c810685 ?? ???
这次中断的时机更早,使用!heap命令可以看到上没有任何堆:
0:000> !heap
No heaps to display.
You must specify the actual heap address since
array of process heaps is inaccessable

此时,对RtlCreateHeap函数埋下一个断点:
0:000> bp ntdll!RtlCreateHeap
然后让被调试程序继续执行:
0:000> g

接下来断点就会命中:
Breakpoint 0 hit
eax=00001003 ebx=7ffde000 ecx=00010000 edx=00000000 esi=00010000 edi=00011970
eip=7c92552a esp=0012ff54 ebp=0012ff74 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
ntdll!RtlCreateHeap:
7c92552a 68a4000000 push 0A4h
这时再使用栈观察命令,就可以看到了:
0:000> kn
# ChildEBP RetAddr
00 0012fb04 7c921e0a ntdll!RtlCreateHeap
01 0012fc94 7c921639 ntdll!LdrpInitializeProcess+0x4b7
02 0012fd1c 7c90eac7 ntdll!_LdrpInitialize+0x183
03 00000000 00000000 ntdll!KiUserApcDispatcher+0x7
使用gu命令可以执行完RtlCreateHeap,而后再使用!heap命令,就可以可看到一个堆了:
0:000> !heap
Index Address Name Debugging options enabled
1: 00140000

IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » 初始断点

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.